﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using InmobiliariaNegocio;
using Exepciones;

namespace InmobiliariaIntefaz
{
    public partial class frmCliente : Form
    {
        private Inmobiliaria inmobiliaria;

        public frmCliente(Inmobiliaria inmob)
        {
            InitializeComponent();

            inmobiliaria = inmob;
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            AgregarDatos();
            txtNombre.Focus();
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            CargarGrilla();
        }

        private void CargarGrilla()
        {
            BindingSource source = new BindingSource();
            grvClientes.AutoGenerateColumns = true;
            source.DataSource = inmobiliaria.listarClientes();
            grvClientes.DataSource = source;
            grvClientes.Columns[8].Visible = false;
        }

        private void frmCliente_Load(object sender, EventArgs e)
        {
            CargarGrilla();
        }

        private void grvClientes_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (grvClientes.ColumnCount > 5)
            {
                if (e.ColumnIndex == 0)
                    ModificarDatos();

                if (e.ColumnIndex == 1)
                    EliminarDatos();
            }
        }

        private void ModificarDatos()
        {
            txtDni.Enabled = false;
            txtNombre.Enabled = true;
            txtApellido.Enabled = true;
            txtTelefono.Enabled = true;
            txtDireccion.Enabled = true;
            txtLocalidad.Enabled = true;

            grvClientes.Enabled = false;

            btnAgregar.Visible = false;

            lblEstado.Text = "Modificar";

            MostrarControles();
        }

        private void EliminarDatos()
        {
            txtDni.Enabled = false;
            txtNombre.Enabled = false;
            txtApellido.Enabled = false;
            txtTelefono.Enabled = false;
            txtDireccion.Enabled = false;
            txtLocalidad.Enabled = false;

            grvClientes.Enabled = false;

            btnAgregar.Visible = false;

            lblEstado.Text = "Eliminar";

            MostrarControles();
        }

        private void AgregarDatos()
        {
            btnAgregar.Visible = false;

            lblAviso.Text = "INFORMAR! Clave cliente inicial para acceso Web es 'clave'";
            lblEstado.Text = "Agregar";

            MostrarControles();
        }

        private void MostrarControles()
        {
            btnAceptar.Visible = true;
            btnCancelar.Visible = true;
        }

        private void LimpiarControles()
        {
            txtDireccion.Text = "";
            txtDni.Text = "";
            txtNombre.Text = "";
            txtTelefono.Text = "";
            txtApellido.Text = "";
            txtLocalidad.Text = "";

            btnAceptar.Visible = false;
            btnCancelar.Visible = false;
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            txtDni.Enabled = false;
            txtNombre.Enabled = true;
            txtApellido.Enabled = true;
            txtTelefono.Enabled = true;
            txtDireccion.Enabled = true;
            txtLocalidad.Enabled = true;
            grvClientes.Enabled = true;
            btnAgregar.Visible = true;

            LimpiarControles();
        }

        public bool ValidarDatos()
        {
            try
            {
                if (txtNombre.Text.Length == 0)
                {
                    txtNombre.Focus();
                    throw new BlancoExepcionCli("Nombre");
                }

                if (txtDni.Text.Length == 0)
                {
                    txtDni.Focus();
                    throw new BlancoExepcionCli("DNI");
                }

                if (txtDireccion.Text.Length == 0)
                {
                    txtDireccion.Focus();
                    throw new BlancoExepcionCli("Dirección");
                }

                if (txtTelefono.Text.Length == 0)
                {
                    txtDni.Focus();
                    throw new BlancoExepcionCli("Teléfono");
                }

                try
                {
                    int d = int.Parse(txtDni.Text);
                }
                catch (FormatException ex)
                {
                    MessageBox.Show("El campo DNI debe ser numérico.");
                    return false;
                }

                try
                {
                    int t = int.Parse(txtTelefono.Text);
                }
                catch (FormatException ex)
                {
                    MessageBox.Show("El campo Teléfono debe ser numérico.");
                    return false;
                }

                return true;
            }
            catch (BlancoExepcionCli ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }
            catch (FormatException ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                if (ValidarDatos())
                {
                    if (lblEstado.Text == "Modificar")
                    {
                        int i = 0;
                        while (i <= inmobiliaria.Clientes.Count && inmobiliaria.Clientes[i].Dni.ToString() != txtDni.Text)
                            i++;

                        if (i < inmobiliaria.Clientes.Count)
                        {
                            inmobiliaria.Clientes[i].Apellido = txtApellido.Text;
                            inmobiliaria.Clientes[i].Direccion = txtDireccion.Text;
                            inmobiliaria.Clientes[i].Localidad = txtLocalidad.Text;
                            inmobiliaria.Clientes[i].Nombre = txtNombre.Text;
                            inmobiliaria.Clientes[i].Telefono = int.Parse(txtTelefono.Text);

                            inmobiliaria.Clientes[i].modificarseBD();


                        }
                        else
                            lblEstado.Text = "El cliente no existe.";
                    }

                    if (lblEstado.Text == "Eliminar")
                    {
                        int i = 0;
                        while (i <= inmobiliaria.Clientes.Count && inmobiliaria.Clientes[i].Dni.ToString() != txtDni.Text)
                            i++;

                        if (i < inmobiliaria.Inmuebles.Count)
                        {
                            if (inmobiliaria.existeClienteEnAlquiler(inmobiliaria.Clientes[i]))
                                MessageBox.Show("El cliente se encuentra alquilando, no se puede eliminar.");
                            else if (inmobiliaria.existeClienteEnVenta(inmobiliaria.Clientes[i]))
                                MessageBox.Show("El cliente ha realizado compras, no se puede eliminar.");
                            else
                            {
                                inmobiliaria.Clientes[i].eliminarseBD();
                                inmobiliaria.eliminarCliente(inmobiliaria.Clientes[i]);
                            }
                        }
                    }

                    if (lblEstado.Text == "Agregar")
                    {
                        Cliente cliente = new Cliente(int.Parse(txtDni.Text), txtNombre.Text, txtApellido.Text, txtDireccion.Text, txtLocalidad.Text, int.Parse(txtTelefono.Text), "clave");

                        inmobiliaria.agregarCliente(cliente);
                        cliente.guardarseBD();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            CargarGrilla();

            txtDni.Enabled = true;
            txtNombre.Enabled = true;
            txtApellido.Enabled = true;
            txtTelefono.Enabled = true;
            txtDireccion.Enabled = true;
            txtLocalidad.Enabled = true;
            grvClientes.Enabled = true;

            lblAviso.Text = "";
            btnAgregar.Visible = true;

            LimpiarControles();
        }

        private void grvClientes_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex > -1)
            {
                if (grvClientes.ColumnCount > 5 && grvClientes.Rows[e.RowIndex].Cells[2].Value != null &&
                    grvClientes.Rows[e.RowIndex].Cells[3].Value != null &&
                    grvClientes.Rows[e.RowIndex].Cells[4].Value != null &&
                    grvClientes.Rows[e.RowIndex].Cells[5].Value != null)
                {
                    txtDni.Text = grvClientes.Rows[e.RowIndex].Cells[4].Value.ToString();
                    txtNombre.Text = grvClientes.Rows[e.RowIndex].Cells[3].Value.ToString();
                    txtApellido.Text = grvClientes.Rows[e.RowIndex].Cells[2].Value.ToString();
                    txtTelefono.Text = grvClientes.Rows[e.RowIndex].Cells[7].Value.ToString();
                    txtDireccion.Text = grvClientes.Rows[e.RowIndex].Cells[5].Value.ToString();
                    txtLocalidad.Text = grvClientes.Rows[e.RowIndex].Cells[6].Value.ToString();
                }
            }
        }
    }
}
